package util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 在界面初始化时创建文件信息数据表
 */
public class DBInit {
    /**
     * 从resouces路径下读取init.sql文件，加载到程序中
     *
     * @return
     */
    public static List<String> readSQL() {
        List<String> ret = new ArrayList<>();
        //从init.sql文件中获取内容，需要拿到文件的输入流
        try {
            InputStream in = DBUtil.class.getClassLoader()
                    .getResourceAsStream("init.sql");
            //对于输入流来说，一律采用Scanner类处理
            //对于输出流流说，一律采用PrintStream类处理
            Scanner scanner = new Scanner(in);
            //自定义分隔符，按照“;”来分开SQL语句
            scanner.useDelimiter(";");
            //nextLine默认碰到换行分隔
            //next按照自定义的分隔符拆分
            while (scanner.hasNext()) {
                String str = scanner.next();
                if ("".equals(str) || "\n".equals(str)) {
                    continue;
                }
                if (str.contains("--")) {
                    str = str.replaceAll("--", "");
                }
                ret.add(str);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        System.out.println("读取到的SQL内容为:");
        System.out.println(ret);
        return ret;
    }


//    //关于相对路径的问题
//    public static void main(String[] args) {
//        //采用类加载器的方式引入资源文件
//        //JVM在加载类的时候用到的ClassLoader类
//        //获取到了编译后的classes目录，就不会存在编译时和打jar包后init.sql的路径问题
//        InputStream in=DBInit.class.getClassLoader()
//                .getResourceAsStream("init.sql");
//        System.out.println(in);
//    }

    /**
     * 在界面初始化时先初始化数据库，创建数据表
     */
    public static void init() {
        Connection connection = null;
        Statement statement = null;
        try {
            connection = DBUtil.getConnection();
            // 获取要执行的sql语句
            List<String> sqls = readSQL();
            // 这里采用了普通的Statement接口，获取statement连接
            statement = connection.createStatement();
            for (String sql : sqls) {
                System.out.println("执行SQL操作 : " + sql);
                statement.executeUpdate(sql);
            }
        }catch (SQLException e) {
            System.err.println("数据库初始化失败");
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement);
        }
    }

    public static void main(String[] args) {
        init();
    }
}
